﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Model;

namespace View
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        private static int intentosFallidos;
        private static string nombreUsuario;
        public MainWindow()
        {
            InitializeComponent();
            intentosFallidos = 0;
        }

        private void usuarioIngresandoCorrectamente(Usuario usuario)
        {
            if (usuario.NombreDeUsuario.Equals("jorge1234567"))
            {
                string aux = "Ingreso del administrador con fecha: " + DateTime.Now;
                Model.Clases.RegistroLogs.EscribirLog(aux, "LogsAdministrador.txt");
                VentanaAdministrador registrar = new VentanaAdministrador();
                this.Close();
                registrar.ShowDialog();
            }
            else
            {
                string aux = "Ingreso correcto de: " + usuario.NombreDeUsuario + " en fecha: " + DateTime.Now;
                Model.Clases.RegistroLogs.EscribirLog(aux, "LogsPass.txt");

                if (usuario.Estado == 2)
                {
                    MessageBox.Show("Debe renovar su contraseña", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
                    VentanaDocente ventana = new VentanaDocente(usuario);
                    this.Close();
                    ventana.ShowDialog();
                }
                else
                {
                    List<VidaDelPass> tiempos = DataAccess.AccessoADatos.obtenerVidaDelPass();
                    Double res = tiempos[tiempos.Count - 1].TiempoSemanas;
                    DateTime sistema = DateTime.Now;
                    DateTime userrr = usuario.ActualizacionContraseña.Value.Date;
                    DateTime adddd = userrr.AddDays(res * 7);
                    if (sistema.Date >= adddd.Date)
                    {
                        MessageBox.Show("Debe renovar su contraseña", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
                        VentanaDocente ventana = new VentanaDocente(usuario);
                        this.Close();
                        ventana.ShowDialog();
                    }
                    else
                    {
                        VentanaDocenteInicio venatan = new VentanaDocenteInicio(usuario);
                        this.Close();
                        venatan.ShowDialog();
                    }
                }
                
            }
        }

        private void btnIniciarSesion_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                Usuario usuario = DataAccess.AccessoADatos.ObtenerUsuario(xbNombre.Text);
                nombreUsuario = xbNombre.Text;
                AES desencriptador = new AES();
                string contrasenia = usuario.Contraseña;
                usuario.Contraseña=desencriptador.Desencrit(contrasenia);
                if (usuario.Contraseña==xbpassword.Password)
                {
                    if (usuario.Estado != 0)//desactivada
                    {
                        usuarioIngresandoCorrectamente(usuario);
                    }
                    else   
                    {
                        MessageBox.Show("Cuenta desactivada contacte al administrador", "Warning", MessageBoxButton.OK, MessageBoxImage.Warning);
                    }
                }
                else
                {
                    string aux = "Intento de ingreso al sistema incorrecto. Usuario: " + usuario.NombreDeUsuario + " Con fecha:" + DateTime.Now;
                    Model.Clases.RegistroLogs.EscribirLog(aux, "LogPassError.txt");
                    MessageBox.Show("Contrasenia Incorrecta", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                    if (nombreUsuario == xbNombre.Text.Trim())
                    {
                        intentosFallidos++;
                        if(intentosFallidos==5)
                        {
                            MessageBox.Show("Su cuenta ha sido desactivada por sobrepasar cinco intentos fallidos al ingresar la contraseña, contacte al administrador", "Aviso", MessageBoxButton.OK, MessageBoxImage.Error);
                            try
                            {
                                Usuario u = new Usuario();
                                u.NombreDeUsuario = nombreUsuario;
                                u.Estado = 0;//desactivada
                                DataAccess.AccessoADatos.desactivarUsuario(u);
                            }
                            catch
                            {
                                MessageBox.Show("Error al desactivar la cuenta", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                            }
                        }
                    }
                }
                    
            }
            catch
            {
                MessageBox.Show("Usuario Incorrecto", "Error", MessageBoxButton.OK,MessageBoxImage.Error);
            }
        }
        
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            RegistrarUsuario sdf = new RegistrarUsuario();
            sdf.ShowDialog();
        }
    }
}
